<?php

/**
 * Composizione di immagini
 *
 * @author Fabrizio Filieri
 */
class Composite
{
	/**
	 * Allineamento in alto a sinistra
	 */
	const NORTH_WEST					= "NorthWest";

	/**
	 * Allineamento in alto
	 */
	const NORTH							= "North";

	/**
	 * Allineamento in alto a destra
	 */
	const NORTH_EAST					= "NorthEast";

	/**
	 * Allineamento a sinistra
	 */
	const WEST							= "West";

	/**
	 * Allineamento al centro
	 */
	const CENTER						= "Center";

	/**
	 * Allineamento a destra
	 */
	const EAST							= "East";

	/**
	 * Allineamento in basso a sinistra
	 */
	const SOUTH_WEST					= "SouthWest";

	/**
	 * Allineamento in basso
	 */
	const SOUTH							= "South";

	/**
	 * Allineamento in basso a destra
	 */
	const SOUTH_EAST					= "SouthEast";

	/**
	 * Composizione bumpmap
	 */
	const COMPOSE_BUMPMAP				= "bumpmap";

	/**
	 * Composizione multiply
	 */
	const COMPOSE_MUTIPLY				= "multiply";

	/**
	 * Composizione screen
	 */
	const COMPOSE_SCREEN				= "screen";

	/**
	 * Composizione plus
	 */
	const COMPOSE_PLUS					= "plus";

	/**
	 * Composizione add
	 */
	const COMPOSE_ADD					= "add";

	/**
	 * Composizione minus
	 */
	const COMPOSE_MINUS					= "minus";

	/**
	 * Composizione subtract
	 */
	const COMPOSE_SUBTRACT				= "subtract";

	/**
	 * Composizione difference
	 */
	const COMPOSE_DIFFERENCE			= "difference";

	/**
	 * Composizione exclusion
	 */
	const COMPOSE_EXCLUSION				= "exclusion";

	/**
	 * Composizione darken
	 */
	const COMPOSE_DARKEN				= "darken";

	/**
	 * Composizione lighten
	 */
	const COMPOSE_LIGHTEN				= "lighten";

	/**
	 * Immagine di sfondo.
	 * @var string il nome del file dell'immagine di sfondo
	 */
	public $bgFilename;

	/**
	 * Immagine in foreground
	 * @var string il nome del file dell'immagine in primo piano
	 */
	public $fgFilename;

	/**
	 * La qualità dell'immaginedi output. Di default è impostata a 90. Il valore massimo è 100.
	 * @var int qualità
	 */
	public $quality		= 90;


	/**
	 * Imposta la gravità per i ridimensionamenti. Di default la gravità è impostata al centro dell'immagine
	 *
	 * @var CONST Controllare i valori delle costanti di Composite
	 */
	public $gravity		= self::CENTER;

	/**
	 * Imposta l'offset con cui deve essere composta l'immagine. Esempio '+5+5' indica
	 * che $fgFilename sarà inserita sull'immagine $bgFilename a partire da 5px si da
	 * NORD che da EST. Un valore '+0+0' avrà lo stesso risultato della constante 'NORTH_WEST'
	 * impostata nel parametri $gravity
	 *
	 * @var string
	 */
	public $geometry	= NULL;

	/**
	 * Tipo di composizione da adottare. Controllar ele costanti della classi.
	 *
	 * @var CONST composizione da adottare nella composizione
	 */
	public $compose		= null;

	/**
	 * Utilizzata per ripetere l'immagine in foreground su tutto lo spazio disponibile. Utile per inserire delle trame.
	 * DI default è impostata su falsa, impostare su true per far in modo che l'immagine venga ripetuta.
	 * @var boolean true per fare in modo che l'immagine in foreground sia ripetuta per tutta l'area dell'immagine
	 */
	public $tile		= false;


	/**
	 * Salva il montaggio delle immagini.
	 *
	 * @param string $filedest
	 */
	public function save($filedest)
	{
		$option = '';
		if($this->geometry === NULL)
			$option.= " -gravity " . $this->gravity . " ";
		else
			$option.= " -geometry " . $this->geometry . " ";

		$option.= " -quality ".$this->quality." ";

		if ($this->compose != null)
		{
			$option.= " -compose ".$this->compose." ";
		}

		if ($this->tile === true)
			$tiled = " -tile ";
		else
			$tiled = '';
		
		$command = "composite ".$tiled." ".$this->fgFilename." ".$this->bgFilename." ".$option." ".$filedest;
		exec($command);
		//echo "<br>".$command."<br>";
	}


}
?>
